﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;

namespace DAO
{
    public class DiaDiem_KhuyenMai_DAO
    {
        BanHang_LinQDataContext db = new BanHang_LinQDataContext();

        //Phương thức lấy danh sách những địa điểm khuyến mãi
        public List<DiaDiem_KhuyenMai> LayDanhSach_DiaDiem_KhuyenMai(DiaDiem_KhuyenMai ddKMai)
        {
            try
            {
                List<DiaDiem_KhuyenMai> list = db.DiaDiem_KhuyenMais.Where(ddkm => ddkm.isDelete == 0).ToList();
                return list;
            }
            catch
            {
                return null;
            }
        }

        //phương thức lấy danh sách địa điểm khuyến mãi theo theo từng địa điểm
        public List<DiaDiem_KhuyenMai> LayDanhSachTheoDiaDiem_DiaDiem_KhuyenMai(DiaDiem maDiaDiem)
        {
            try
            {
                List<DiaDiem_KhuyenMai> list = db.DiaDiem_KhuyenMais.Where(ddkm => ddkm.MaDiaDiem == maDiaDiem.MaDiaDiem).ToList();
                return list;
            }
            catch
            {
                return null;
            }
        }

        //Phương thức lấy danh sách địa điểm khuyến mãi theo từng loại khuyến mãi
        public List<DiaDiem_KhuyenMai> LayDanhSachTheoKhuyenMai_DiaDiem_KhuyenMai(KhuyenMai maKhuyenMai)
        {
            try
            {
                List<DiaDiem_KhuyenMai> list = db.DiaDiem_KhuyenMais.Where(ddkm => ddkm.MaKhuyenMai == maKhuyenMai.MaKhuyenMai).ToList();
                return list;
            }
            catch
            {
                return null;
            }
        }

        // Phương thức lấy thông tin của một địa điểm khuyến mãi
        public DiaDiem_KhuyenMai LayThongTin_DiaDiem_KhuyenMai(DiaDiem_KhuyenMai ddKmai)
        {
            try
            {
                DiaDiem_KhuyenMai ddkhuyenmai = db.DiaDiem_KhuyenMais.SingleOrDefault(ddkm => ddkm.MaDiaDiem == ddKmai.MaDiaDiem && ddkm.MaKhuyenMai == ddKmai.MaKhuyenMai);
                return ddkhuyenmai;
            }
            catch
            {
                return null;
            }
        }

        //Phương thức thêm một địa điểm khuyến mãi
        public bool Them_DiaDiem_KhuyenMai(DiaDiem_KhuyenMai ddkmai)
        {
            try
            {
                db.DiaDiem_KhuyenMais.InsertOnSubmit(ddkmai);
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }

        //Phương thức xóa một địa điểm khuyến mãi
        public bool Xoa_DiaDiem_KhuyenMai(DiaDiem_KhuyenMai ddkmai)
        {
            try
            {
                DiaDiem_KhuyenMai ddKhuyenMai = db.DiaDiem_KhuyenMais.SingleOrDefault(ddkm => ddkm.MaDiaDiem == ddkmai.MaDiaDiem && ddkm.MaKhuyenMai == ddkmai.MaKhuyenMai);
                ddKhuyenMai.isDelete = 1;
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }

        //Phương thức sửa một địa điểm khuyến mãi
        public bool Sua_DiaDiem_KhuyenMai(DiaDiem_KhuyenMai ddkmai)
        {
            try
            {
                DiaDiem_KhuyenMai ddKhuyenMai = db.DiaDiem_KhuyenMais.SingleOrDefault(ddkm => ddkm.MaDiaDiem == ddkmai.MaDiaDiem && ddkm.MaKhuyenMai == ddkmai.MaKhuyenMai);
                ddKhuyenMai.MaDiaDiem = ddkmai.MaDiaDiem;
                ddKhuyenMai.MaDiaDiem = ddkmai.MaKhuyenMai;
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }


        //Sanh Thêm Vô
        /// <summary>
        /// Danh sách khuyến mãi theo địa điểm   ====== Sanh Cap Nhat
        /// </summary>
        /// <param name="madd"></param>
        /// <returns></returns>
        public IQueryable KhuyenMaiTheoDiaDiem(int madd)
        {
            try
            {
                if (madd == 0)
                {
                    var query = from km in db.KhuyenMais
                                join kmha in db.KhuyenMai_HinhAnhs
                                on km.MaKhuyenMai equals kmha.MaKhuyenMai
                                join ha in db.HinhAnhs
                                on kmha.MaHinhAnh equals ha.MaHinhAnh
                                where ha.LoaiHinh == 1
                                join ddkm in db.DiaDiem_KhuyenMais
                                on km.MaKhuyenMai equals ddkm.MaKhuyenMai
                                join dd in db.DiaDiems
                                on ddkm.MaDiaDiem equals dd.MaDiaDiem
                                join dp in db.DiaPhuongs on dd.MaDiaPhuong equals dp.MaDiaPhuong
                                select new
                                {
                                    km.MaKhuyenMai,
                                    ha.DuongDan,
                                    km.GiaGoc,
                                    km.GiaKhuyenMai,
                                    km.TongSoNguoiMua,
                                    km.TenKhuyenMai,
                                    dp.MaDiaPhuong,
                                    km.ThoiGianBatDau, 
                                    km.ThoiGianKetThuc,
                                    km.SoLuongToiDa
                                };
                    return query;
                }
                else
                {
                    var query = from km in db.KhuyenMais
                                join kmha in db.KhuyenMai_HinhAnhs
                                on km.MaKhuyenMai equals kmha.MaKhuyenMai
                                join ha in db.HinhAnhs
                                on kmha.MaHinhAnh equals ha.MaHinhAnh
                                where ha.LoaiHinh == 1
                                join ddkm in db.DiaDiem_KhuyenMais
                                on km.MaKhuyenMai equals ddkm.MaKhuyenMai
                                join dd in db.DiaDiems
                                on ddkm.MaDiaDiem equals dd.MaDiaDiem
                                join dp in db.DiaPhuongs on dd.MaDiaPhuong equals dp.MaDiaPhuong
                                where dp.MaDiaPhuong == madd
                                select new
                                {
                                    km.MaKhuyenMai,
                                    ha.DuongDan,
                                    km.GiaGoc,
                                    km.GiaKhuyenMai,
                                    km.TongSoNguoiMua,
                                    km.TenKhuyenMai,
                                    dp.MaDiaPhuong,
                                    km.ThoiGianBatDau,
                                    km.ThoiGianKetThuc,
                                    km.SoLuongToiDa
                                };
                    return query;
                }
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception(ex.Message);
            }
        }
    }
}
